import request from "@/utils/request";
import PageResult from "@/types/global";
import { SearchShipVo } from "@/api/search-ship";
import { ShipFavorite } from "@/api/favorite-ship/favorites";
import {DictVO} from "@/api/system/dict";
const GENERATOR_BASE_URL = "/client";

const UserAPI = {
  /** 获取单个类型的字典数据 */
  getDictData(dictType:String) {
    return request<any, DictVO[]>({
      url: `${GENERATOR_BASE_URL}/auth/dict/type/${dictType}`,
      method: "get",
    });
  },

  /** 账户登录 */
  login(data: LoginDto) {
    return request<any, LoginVo>({
      url: `${GENERATOR_BASE_URL}/auth/ship/user/login`,
      method: "post",
      data,
    });
  },

  /** 获取用户信息 */
  getUserInfo() {
    return request<any, any>({
      url: `${GENERATOR_BASE_URL}/ship/user/info`,
      method: "get",
    });
  },

  /**
   * 注册时发送邮箱验证码
   * @param email 需要接收验证码的邮箱地址
   */
  regisSendCode(regisDto:any) {
    return request<APIResponse<null>>({
      url: `${GENERATOR_BASE_URL}/auth/ship/user/regisSendCode`,
      method: "post",
      data:regisDto,
    });
  },
  /**
   * 用户注册
   * @param data 注册参数（需要根据实际需求调整）
   */
  regisUser(data:any) {
    return request<APIResponse<UserVo>>({
      url: `${GENERATOR_BASE_URL}/auth/ship/user`,
      method: "post",
      data,
    });
  },
  /**
   * 用户登录
   * @param data 登录凭证
   */
  Userlogin(data: {
    email: string; // 登录邮箱（假设使用邮箱登录）
    password: string; // 密码
    code?: string; // 可选验证码（如果开启双因素认证）
  }) {
    return request<APIResponse<LoginResult>>({
      url: `${GENERATOR_BASE_URL}/client/ship/user/login`,
      method: "post",
      data,
    });
  },

  /**
   * 发送密码重置验证码
   * @param email 需要接收验证码的邮箱地址
   */
  resetPswSendCode(data:any) {
    return request<APIResponse<null>>({
      url: `${GENERATOR_BASE_URL}/auth/ship/user/resetPswSendCode`,
      method: "post",
      data,
    });
  },
  /**
   * 重置用户密码
   * @param data 密码重置参数
   */
  resetPwd(data:any) {
    return request<APIResponse<null>>({
      url: `${GENERATOR_BASE_URL}/auth/ship/user/resetPwd`,
      method: "put",
      data,
    });
  },
  /**
   * 用户退出登录
   * 说明：通常需要配合清除本地token和用户信息
   */
  logOut() {
    return request<APIResponse<null>>({
      url: `${GENERATOR_BASE_URL}/ship/user/logOut`,
      method: "post",
      // 根据后端要求可能需要传空对象
      data: {},
    });
  },
  /**
   * 修改用户信息
   * @param data 需要更新的用户信息（根据实际需求调整字段）
   */
  editUserInfo(data) {
    return request<APIResponse<UserVo>>({
      url: `${GENERATOR_BASE_URL}/ship/user/edit`,
      method: "put",
      data,
    });
  },
  /**
   * 用户注销账号
   * 注意：此操作通常不可逆，建议前端添加二次确认弹窗
   */
  logOff(data: {
    password: string; // 账户密码（重要操作需验证）
    verificationCode?: string; // 可选验证码（根据安全等级要求）
  }) {
    return request<APIResponse<null>>({
      url: `${GENERATOR_BASE_URL}/ship/user/logOff`,
      method: "post",
      data,
    });
  },
  /**
   * 查询船舶列表（POST）
   * @param data 查询条件及分页参数
   */
  fetchShipList(data: ShipQueryParams) {
    return request<APIResponse<ShipListResult>>({
      url: `${GENERATOR_BASE_URL}/ship/ship/list`,
      method: "post",
      data,
    });
  },
  /**
   * 获取船舶详情
   * @param shipId 船舶ID (路径参数)
   */
  getShipDetail(shipId: number) {
    return request<APIResponse<ShipDetail>>({
      url: `${GENERATOR_BASE_URL}/ship/ship/${shipId}`, // 最终路径为 /client/ship/ship/{shipId}
      method: "get",
    });
  },
  /**
   * 获取代理产品列表
   * @param params 查询参数（分页/过滤条件）
   */
  getProxyProductList(params: ProxyProductQuery = {}) {
    // 设置默认分页参数
    return request<any, PageResult<ProductItem[]>>({
      url: `${GENERATOR_BASE_URL}/auth/shipProxyProduct/list`,
      method: "get",
      params,
    });
  },
  /**
   * 获取代理产品目录列表
   * @param sppId 目录ID（字符串类型）
   */
  getProxyCatalog(params: ProxyProductQueryTwo = {}) {
    return request<APIResponse<CatalogItem[]>>({
      url: `${GENERATOR_BASE_URL}/auth/proxyProductCatalog/list`,
      method: "get",
      params,
    });
  },
  /**
   * 获取国籍列表
   */
  getNationalityList(params) {
    return request<any, PageResult[]>({
      url: `${GENERATOR_BASE_URL}/auth/ship/detailed/list`,
      method: "get",
      params,
    });
  },
};
export default UserAPI;

/** 登录时传参 */
export interface LoginDto {
  email: string;
  password: string;
}

// types.ts
interface APIResponse<T> {
  code: number;
  msg: string;
  data?: T; // 根据实际返回结构调整
  total?: number;
}

// types.ts (扩展类型)
interface ShipDetail {
  shipId: number;
  shipName: string;
  imoNumber: string; // IMO编号
  shipType: string;
  maxTon: number; // 最大载重吨位
  currentPort: string; // 当前所在港口
  nextAvailable: string; // 下次可用时间
  status: "FREE" | "BOOKED" | "MAINTENANCE";
  pricePerDay: number; // 日租金
  facilities: string[]; // 船舶设施
  location: {
    // 实时位置 (可选)
    lat: number;
    lng: number;
  };
}

// types.ts（新增登录相关类型）
interface LoginResult {
  token: string; // 认证令牌
  userInfo: UserVo; // 用户基本信息
  expire?: number; // 可选token有效期
}

// 扩展已有用户类型（根据实际需求调整）
interface UserVo {
  userId: number;
  username: string;
  email: string;
  avatar?: string;
  lastLoginTime?: string; // 最后登录时间
}

// types.ts（类型扩展）
interface UserVo {
  userId: number;
  username: string;
  email: string;
  avatar?: string;
  // 其他用户信息字段...
}

// types.ts（确保 UserVo 类型与后端一致）
interface UserVo {
  userId: number;
  username: string;
  email: string;
  avatar?: string;
  phone?: string;
  createTime: string;
  // 其他扩展字段...
}

// types.ts
interface ShipQueryParams {
  // 分页参数
  pageNum: number;
  pageSize: number;

  // 筛选条件
  shipType?: "CONTAINER" | "BULK" | "TANKER"; // 枚举类型示例
  minTon?: number; // 最小吨位
  maxTon?: number; // 最大吨位
  departurePort?: string; // 出发港口
  destinationPort?: string; // 目的港口
  sailingDateStart?: string; // 航期范围开始（YYYY-MM-DD）
  sailingDateEnd?: string; // 航期范围结束
}

interface ShipListResult {
  rows: ShipItem[];
  total: number;
}

interface ShipItem {
  shipId: number;
  shipName: string;
  imoNumber: string; // 国际海事组织编号
  shipType: string;
  maxTon: number; // 最大载重吨位
  currentPort: string; // 当前所在港口
  nextAvailable: string; // 下次可用时间（ISO8601）
  status: "AVAILABLE" | "BOOKED" | "MAINTENANCE";
  priceRange?: [number, number]; // 价格区间（可选）
}

// types.ts
export interface ProxyProductQuery {}

export interface ProxyProductQueryTwo {}

interface ProductItem {
  productId: number;
  productName: string;
  marketPrice: number; // 市场价
  proxyPrice: number; // 代理专属价格
  stock: number; // 库存数量
  status: 0 | 1 | 2;
  thumbnail: string; // 缩略图URL
  salesVolume: number; // 销量
  commissionRate?: number; // 佣金比例（可选）
}
// 目录数据类型
interface CatalogItem {
  catalogId: string;
  catalogName: string;
  parentId?: string;
  sortOrder: number;
  productCount: number;
}

// 国籍数据类型
interface NationalityItem {
  countryCode: string;
  countryName: string;
  flagIcon?: string;
  phoneCode: string;
}

// 类型定义（types.ts）

/** 登录返回对象 */
export interface LoginVo {}
